package love.actions;

import java.util.ArrayList;

import love.listener.ILoveCardGameListener;
import love.model.Carte;
import love.model.EEtatJoueur;
import love.model.Joueur;

public abstract class AbstractAction implements IAction {
	
	protected Carte carte;
	private ArrayList<ILoveCardGameListener> listeners = new ArrayList<ILoveCardGameListener>();
	
	@Override
	public boolean doIt(Joueur joueur) {
		if(!joueur.getEtat().equals(EEtatJoueur.OUT))
			joueur.setEtat(EEtatJoueur.SUITOR);
		return joueur.poserLaCarte(carte);
	}
	
	@Override
	public void getIt(Joueur joueur) {
	}

	public Carte getCarte() {
		return carte;
	}

	public void setCarte(Carte carte) {
		this.carte = carte;
	}
	
	public void addCardsListeners(ILoveCardGameListener listener){
		if(!listeners.contains(listener)){
			listeners.add(listener);
		}
	}
	
	protected void fireGuardPlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.guardPlayed(joueur);
		}
	}

	protected void firePriestPlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.priestPlayed(joueur);
		}
	}
	
	protected void fireBaronPlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.baronPlayed(joueur);
		}
	}
	
	protected void fireServantePlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.handMaidPlayed(joueur);
		}
	}
	
	protected void firePrincePlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.princePlayed(joueur);
		}
	}
	
	protected void fireKingPlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.kingPlayed(joueur);
		}
	}
	
	protected void fireComtessPlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.comtessPlayed(joueur);
		}
	}
	
	protected void firePrincessPlayed(Joueur joueur) throws Exception{
		for(ILoveCardGameListener listener: listeners){
			listener.princessPlayed(joueur);
		}
	}
}
